package com.Utils;

import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

/**
 * 映射工具
 */
public class RefUtils {

    /**
     * 获取类的变量名 (包括所有父类)
     *
     * @param clazz 类加载器
     * @return 获取类的变量名 (包括所有父类)
     */
    public static String[] getVariableNames(Class<?> clazz) {
        List<String> varNameList = new ArrayList<>();
        // 遍历所有父类字节码对象
        while (clazz != null) {
            Field[] declaredFields = clazz.getDeclaredFields();
            String[] varName = new String[declaredFields.length];
            for (int i = 0; i < varName.length; i++) {
                varName[i] = declaredFields[i].getName();
            }
            // 将`String[]`数组转换为`List<>`然后再将其拼接至`ArrayList`上
            varNameList.addAll(Arrays.asList(varName));
            // 获得父类的字节码对象
            clazz = clazz.getSuperclass();
        }
        // 打印当前类以及其父类的多有属性对象
        System.out.println(varNameList);
        String[] array = new String[varNameList.size()];
        return array.length == 0 ? null : varNameList.toArray(array);
    }
}
